WS_EX_APPWINDOW a modalni okna
Otázka od: Lebeda David
29. 4. 2004 12:54
Ahoj,
ve sve aplikaci mam zobrazene nemodalni okno a chci, aby bylo pristupne z
taskbaru.
Neni problem, delam v OnCreate toto:
SetWindowLong(Self.Handle, GWL_EXSTYLE, GetWindowLong(Self.Handle,
GWL_EXSTYLE) or WS_EX_APPWINDOW);
Funguje to dobre - je-li okno zobrazeno, na taskbaru jsou dve ikony - jedna pro
hlavni
okno, druha pro ono nemodalni okno. No a ted z toho nemodalniho okna zavolam
modalni okno.
Pak se aplikace zacne chovat chybne - po kliknuti na ikonu nemodalniho okna v
taskbaru se nemodalni okno zobrazi a prekryje to modalni okno. Tohle je znamy
problem, nasel jsem ho popsany v archivu.
Nasel jsem pomerne jednoduche reseni - obslouzit Application.OnActivate a v nem
se
udela Screen.ActiveForm.SetFocus. On totiz Screen.ActiveForm kupodivu stale
ukazuje na ten modalni form, i kdyz na vrsku je disablovane nemodalni okno.
Tohle reseni funguje dobre na W2000 - modalni okno vzdy vypluje na povrch. Ale
na
WinXP to uz nefunguje - modalni okno stale zustava nekde vespod. Zjistil jsem
nasledujici:
1) Application.OnActivate je jedina udalost, o ktere se mi podarilo zjistit, ze
se pri
kliknuti na ikonu na taskbaru vyvola. Zadna jina udalost na okne zrejme
nenastava.
2) V Application.OnActivate se mi zaboha nepodarilo to modalni okno dostat
nahoru -
aby nebylo prekryto. Nepomohlo ani odeslani vlastni message pres PostMessage a
delani pokusu az tam.
3) Zduraznuji, ze W2000 neni problem, jen na XP.
4) Neuspel jsem ani s SetWindowPos, SetForegroundWindow ani s nicim jinym.
Nevite nekdo, co je to za zverstvo a pripadne co by s tim slo udelat?
Diky
David Lebeda